"""
Модуль генерации объектов в 3D пространстве.

Модуль выполняет функции:
- Получает конфигурацию из файла config.yaml
- Генерирует объекты согласно конфигурации
- Отображает объекты на 3D графике
- Сохраняет координаты в файл
"""
from swarm_network import charts
from swarm_network import data

# Чтение конфигурации и установка параметров генерации
config = data.read_config('config.yaml')
objects_type = config['objects_type']
filename_prefix = config['filename_prefix']
data_directory = config['data_directory']
num_points = config['num_points']
square_side = config['square_side']
rows = config['rows']
step = config['step']
attitude = config['attitude']
deviation_x_y = config['deviation_x_y']
deviation_z = config['deviation_z']

# Ручное конфигурирование
# filename_prefix = "test"
# objects_type = 'grid'
# num_points = 50
# attitude = 1000
# square_side = 5000
# deviation_z = 10

# Генерация объектов исходя из типа распределения
if objects_type == 'grid': # Сетка
    df = data.generate_points_grid(num_points, square_side,
                                       attitude, deviation_x_y, deviation_z)
    filename = f"{filename_prefix}-{objects_type}-{num_points}-side{square_side}-z{attitude}"
elif objects_type == 'rows':  # Ряды
    df = data.generate_points_rows(num_points, rows, step,
                                       attitude, deviation_x_y, deviation_z)
    filename = f"{filename_prefix}-{objects_type}-{num_points}-rows{rows}-step{step}-z{attitude}"
else:  # Произвольный
    df = data.generate_points_random(num_points, square_side, attitude)
    filename = f"{filename_prefix}-{objects_type}-{num_points}-side{square_side}-z{attitude}"

# Сохранение результата в файл
data.save_data(df, data_directory, filename)

# Визуализация результата
charts.print_objects(df, None, True, "Сгенерированные объекты в 3D пространстве")
